dag_name: template_configs
description: DAG используется для генерации конфигов типа `templated_file`
status: ready (нужен тест?)
doc_status: ready
type: dagtemplate_configs
DAG используется для генерации конфигов типа templated_file (см. Configs > Список конфигов). Он дает возможность задать и конфиг по умолчанию, который будет работать без какой-то настройки от пользователя, и кастомный конфиг для конкретного проекта. DAG генерирует файлы конфигов в папке templated_configs внутри проекта dbt по следующим правилам:
{название конфига}_manual.yaml (или .json), то конфиг создается путем создания символической ссылки на негоtemplated_configs, но уже не проекта dbt, а репозитория самого dataCraft Core.Можно также задавать несколько версий файлов по умолчанию. Для этого в папке templated_configs репозитория создается несколько файлов с разными суффиксами в конце, например, metadata.yml, metadata_v2.yml. Пользователь может указать, какую версию следует использовать с помощью указания пути (см. Configs > Метаконфиги).
Кроме файла в папке templated_configs, для использования внутри dbt также создается макрос, который возвращает содержимое конфига.
Проверяем, что в проекте dbt существует папка templated_configs, а если не существует — создаем ее.
Все конфиги, которые в таблице Configs > Список конфигов помечены как templated_file, независимо от значения метаконфигов.
prepare[{"name": "connectors", "source": "file", "file_path": "/path/to/datacraft/templated_configs/connectors.yml", "format": "yml", "symlink": false},
{"name": "presets", "source": "file", "file_path": "presets_manual.yml", "format": "json", "symlink": "true"},
{"name": "metadata", "source": "airflow_variable", "variable_name": "my_metadata", "format": "yml"},
...
]
prepareformat берем из метаконфига, если есть.source == "other_variable", то в source прописываем airflow_variable.source == "datacraft_variable" не поддерживается, поэтому генерируем ошибку при такой комбинации.source в file.source == "file", то source берем из пути метаконфига. source == "templated_file", то смотрим наличие файла {название конфига}_manual.{format}, если он существует — берем его в качестве file и ставим symlink в true, если нет, то {путь до пакета datacraft}/templated_files/{название конфига}{путь из метаконфига, если есть}{.format} и symlink в false.templated_files проекта dbt файл с названием {name}.{format}.source == "airflow_variable", то копируем значение соответствующей переменной в файл {name}.{format}.source == "file" и symlink == false, то копируем файл file_path в {name}.{format}. Если же symlink == true, то делаем символическую ссылку вместо копирования.macros/templated_files проекта dbt создаем файл {название конфига}.sql по шаблону:{%- macro название_конфига_data() -%}
содержимое файла, созданного выше
{%- endmacro -%}
{%- macro название_конфига() -%}
fromyaml или fromjson(название_конфига_data())
{%- endmacro -%}
DAG запускается перед запуском всех остальных DAG’ов, так как его работа влияет на них через функцию get_configs(...) (см. Configs > Конфигурация > Функция `get_configs(...)`).